import * as React from 'react';

import {IView} from '../types/IView';
import AbsViewObject from './AbsViewObject';

import CanvasView from '../panes/canvas/CanvasView';

abstract class AbsParentViewObject<V extends IView> extends AbsViewObject<V> {

  /**
   * 这个父组件是否可以放置指定类型的子组件, 有些特殊的组件只能放特地类型的子组件需要实现这个方法
   * @param childViewType 要判断的子组件的类型
   * @return 如果可以接收这个子组件, 则返回true
   */
  accept(childViewType: string): boolean {
    return childViewType !== 'tabItem' && childViewType !== 'sliderItem';
  }

  /**
   * 如果子组件有些不能被删除的, 则可以实现这个方法来避免
   * @param childViewIndex 子组件的序号, 判断是否不能被删除
   * @return 如果指定序号的子组件不能删除, 则返回true
   */
  preventDeleteChild(childViewIndex: number): boolean {
    return false;
  }

  protected renderChild(view: IView, refUpdater: (view: IView, Element: any) => void) {
    return (
      <CanvasView key={view.id} view={view} refUpdater={refUpdater}/>
    );
  }

}

export default AbsParentViewObject;
